import plugin from '../../../lib/plugins/plugin.js'
import fs from 'fs'
import YAML from 'yaml'
import Yaml from '../model/Yaml.js'
import co from '../../../lib/common/common.js'
import { segment } from 'oicq'
import { Config} from '../components/index.js'

let path='./plugins/huasheng/config/戳一戳/戳一戳.yaml'
let _path='./plugins/huasheng/config/戳一戳/戳一戳图片/'
let cd = false
let source={}
export class cycgl extends plugin {
    constructor() {
        super({
            name: 'huasheng戳一戳管理',
            dsc: '',
            event: 'message',
            priority: 3000,
            rule: [
                {
                    reg: '^戳一戳(开启|关闭)撤回$',
                    fnc: 'ch',
                },{
                    reg: '^戳一戳禁言时间(\\d)+(分|分钟)?$',
                    fnc: 'jysj',
                },{
                    reg: '^戳一戳撤回时间(\\d)+(秒)?$',
                    fnc: 'chsj',
                },{
                    reg: '^戳一戳总览$',
                    fnc: 'gllb',
                },{
                    reg: '^戳一戳概率(\\d)+(％|%)?(,|，)(\\d)+(％|%)?(,|，)(\\d)+(％|%)?$',
                    fnc: 'gl',
                },{
                    reg: '^上传戳一戳图片*$',
                    fnc: 'sctp',
                },{
                    reg: '^(添加|删除)戳一戳文字(.*)$',
                    fnc: 'wz',
                },{
                    reg: '^戳一戳文字(回复)?列表$',
                    fnc: 'wzlb',
                },{
                    reg: '^戳一戳图片(回复)?列表$',
                    fnc: 'tplb',
                },{
                    reg: '^删除戳一戳图片(\\d)+$',
                    fnc: 'deltp',
                },{
                    reg: '^戳一戳(帮助|help)$',
                    fnc: 'help',
                }
            ]
        })

   }
   
  async ch(e){
  if(!Config.getConfig('set','pz')['cyc']){ return false}
  if (!e.isMaster)  {return false}
    let data=await Yaml.getread(path)
    if(e.msg.includes('开启')){
    data.戳一戳是否撤回=true
     await Yaml.getwrite(path,data)
     await e.reply('开启成功~',true)
    }else{
    data.戳一戳是否撤回=false
    await Yaml.getwrite(path,data)
    await e.reply('关闭成功~',true)
    }
   return true
}


async jysj(e){
if(!Config.getConfig('set','pz')['cyc']){ return false}
if (!e.isMaster)  {return false}
let data=await Yaml.getread(path)
let jytime=e.msg.replace(/戳一戳禁言时间|分|钟/g,'')
let 禁言时间=jytime
jytime=jytime*60
data.戳一戳禁言时间=jytime
await Yaml.getwrite(path,data)
return e.reply(`戳一戳禁言时间,成功设置为${禁言时间}分钟`)
}


async chsj(e){
if(!Config.getConfig('set','pz')['cyc']){ return false}
if (!e.isMaster)  {return false}
let data=await Yaml.getread(path)
let chtime=e.msg.replace(/戳一戳撤回时间|秒/g,'')
let 撤回时间=chtime
chtime=chtime*1000
data.戳一戳撤回时间=chtime
await Yaml.getwrite(path,data)
return e.reply(`戳一戳撤回时间,成功设置为${撤回时间}秒`)
}

//总览
async gllb(e){
if(!Config.getConfig('set','pz')['cyc']){ return false}
if (!e.isMaster)  {return false}
let data=await Yaml.getread(path)
return e.reply(`=========huasheng戳一戳总览=========\n戳一戳文字回复概率:${data.戳一戳文字回复概率}％\n戳一戳图片回复概率:${data.戳一戳图片回复概率}％\n戳一戳其他回复概率:${data.戳一戳其他回复概率}％\n[注意以上3个概率之和必须为100]\n戳一戳撤回时间:${data.戳一戳撤回时间/1000}秒\n戳一戳禁言时间:${data.戳一戳禁言时间/60}分钟\n戳一戳是否撤回:${data.戳一戳是否撤回 ? '是' : '否'}`)
}



//概率
async gl(e){
if(!Config.getConfig('set','pz')['cyc']){ return false}
if (!e.isMaster)  {return false}
let sz=e.msg.replace(/戳一戳概率|％|%/g,'')
sz=sz.replace(/，|,/g,'hs')
sz=sz.split('hs');
let [a,b,c]=sz
if(!((a*1+b*1+c*1)==100)){
return e.reply('3个概率之和必须等于100(￣～￣)')
}
let data=await Yaml.getread(path)
data.戳一戳文字回复概率=a*1
data.戳一戳图片回复概率=b*1
data.戳一戳其他回复概率=c*1
await Yaml.getwrite(path,data)
data=await Yaml.getread(path)
await e.reply(`=========huasheng戳一戳总览=========\n戳一戳文字回复概率:${data.戳一戳文字回复概率}\n戳一戳图片回复概率:${data.戳一戳图片回复概率}\n戳一戳其他回复概率:${data.戳一戳其他回复概率}\n[注意以上3个概率之和必须为100]\n戳一戳撤回时间:${data.戳一戳撤回时间/1000}秒\n戳一戳禁言时间:${data.戳一戳禁言时间/60}分钟\n戳一戳是否撤回:${data.戳一戳是否撤回 ? '是' : '否'}`)
return true
}



//上传图
async sctp(e){
if(!Config.getConfig('set','pz')['cyc']){ return false}
if(!e.isMaster) return e.reply('只有主人能上传!!!')
//cv花海里的秋刀鱼
if(cd) return e.reply('数据缓冲中,请等待一会儿，再上传',true)
if (e.isGroup) {
      source = (await e.group.getChatHistory(e.source ?.seq, 1)).pop()
    }else{
      source = (await e.friend.getChatHistory((e.source ?.time + 1), 1)).pop()
}
let imageMessages = []
if (source) {
      for (let val of source.message) {
        if (val.type === 'image') {
          imageMessages.push(val.url)
        }else if (val.type === 'xml') {
         let resid = val.data.match(/m_resid="(.*?)"/)[1]
          if (!resid) break
          let message = await Bot.getForwardMsg(resid)
          for (const item of message) {
            for (const i of item.message) {
              if (i.type === 'image') {
                imageMessages.push(i.url)
              }
            }
      }      
    }
  }
}else{
    imageMessages = e.img
}
if (!imageMessages.length) return e.reply('消息中未找到图片，请将要发送的图片与消息一同发送或者引用要添加的图像哟~')
    cd = true
try{
    let savePath
    let File
    if(!fs.existsSync(_path)) fs.mkdirSync(_path)
    for (let i = 0; i < imageMessages.length; i++) {
        File = fs.readdirSync(_path)
        savePath = `${_path}${File.length + 1}.jpg`
        await co.downFile(imageMessages[i], savePath)
      }
      e.reply(`上传戳一戳图片${imageMessages.length}张成功，可输入【戳一戳图片回复列表】查看`)
    } catch (err) {
      logger.error(err)
      e.reply('上传戳一戳图片失败')
    }
    cd = false
    return true
}

//图片列表
async tplb(e){
if(!Config.getConfig('set','pz')['cyc']){ return false}
if (!e.isMaster)  {return false}
if (cd) return e.reply('数据缓冲中,请等待一会儿，再查看',true)
cd = true
    let msglist = []
    try{
    let File = fs.readdirSync(_path)
    if(File.length==0){
    e.reply('目前一张图都没有呢~要不试试？→上传戳一戳图片')
    cd = false
    return true
    }
    msglist.push(`戳一戳图片共${File.length}张，可输入【删除戳一戳图片+(序列号)】进行删除`)
    for (let i = 0; i < File.length; i++) {
      msglist.push([`${i+1}.`, segment.image(`${_path}${File[i]}`)])
    }

    let msgRsg = await e.reply(await co.makeForwardMsg(e, msglist))
    if (!msgRsg)  e.reply('可能风控了，私聊查看试试', true)
  }catch(err) {
      logger.error(err)
  }
 cd = false
}
//删图
async deltp(e){
if(!Config.getConfig('set','pz')['cyc']){ return false}
if (!e.isMaster)  {return false}
    //获取序号
    let num = e.msg.match(/\d+/)
    if (!num) {
    return  e.reply('序列号呢？要不先【戳一戳图片回复列表】查看下图片对应的序列号...')
    }
    try{
    let File = fs.readdirSync(_path)
    fs.unlinkSync(`${_path}${File[num - 1]}`)
 await e.reply('删除成功啦(=^▽^=)')
    } catch(err) {
      e.reply('删除失败，请检查序列号是否正确')
    }
}

//文字列表
async wzlb (e) {
if(!Config.getConfig('set','pz')['cyc']){ return false}
if (!e.isMaster)  {return false}
    let nickname = Bot.nickname
    if (this.e.isGroup) {
      let info = await Bot.getGroupMemberInfo(this.e.group_id, Bot.uin)
      nickname = info.card ?? info.nickname
    }
    let userInfo = {
      user_id: Bot.uin,
      nickname
    }
    let forwardMsg = [
      {
        ...userInfo,
        message: '=====戳一戳文字回复列表=====\n可使用【删除戳一戳文字+(序号)】删除掉对应的文字回复'
      }
    ]
    let data=await Yaml.getread(path)
    let msg=[]
    logger.info(data.戳一戳文字回复列表)
    if(data.戳一戳文字回复列表==null||data.戳一戳文字回复列表.length==0){return e.reply('没有戳一戳文字回复呢~不妨试试【添加戳一戳文字+(文字)】添加一些呢')}
    for (let v = 0; v < data.戳一戳文字回复列表.length; v++) {
      msg.push(`${v+1}.`+data.戳一戳文字回复列表[v]+'\n')
    }
    forwardMsg.push(
          {
            ...userInfo,
            message: msg
          }
        )
    if (this.e.isGroup) {
      forwardMsg = await this.e.group.makeForwardMsg(forwardMsg)
    } else {
      forwardMsg = await this.e.friend.makeForwardMsg(forwardMsg)
    }
    forwardMsg.data = forwardMsg.data
      .replace(/\n/g, '')
      .replace(/<title color="#777777" size="26">(.+?)<\/title>/g, '___')
      .replace(/___+/, `<title color="#777777" size="26">戳一戳文字回复列表</title>`)
    return e.reply(forwardMsg)
  }
  
  
//管理戳一戳文字回复
async wz(e){
if(!Config.getConfig('set','pz')['cyc']){ return false}
if (!e.isMaster)  {return false}
let data=await Yaml.getread(path)
if(data.戳一戳文字回复列表==null){data.戳一戳文字回复列表=[]}
if(e.msg.includes('添加戳一戳文字')){
let 文字 = e.msg.replace(/添加戳一戳文字/g,'')
if(!文字){return e.reply('要添加的戳一戳文字内容呢？？？')}
data.戳一戳文字回复列表.push(文字)
await Yaml.getwrite(path,data)
return e.reply(`【${e.msg}】成功！`)
}

if(e.msg.includes('删除戳一戳文字')){
//获取序号
let num = e.msg.match(/\d+/)
if (!num) {
    return  e.reply('序列号呢？要不先【戳一戳文字回复列表】查看下文字对应的序列号...')
}
let 内容=data.戳一戳文字回复列表[num-1]
if(!内容){return e.reply('错误❌，请检查序号是否正确，或者检查戳一戳文字列表是否为空')}
await data.戳一戳文字回复列表.splice(data.戳一戳文字回复列表.indexOf(内容), 1)//位置索引，删除1个
await Yaml.getwrite(path,data)
await e.reply('删除成功 (*^▽^*) ')
}


}

//戳一戳帮助
async help(e){
if(!Config.getConfig('set','pz')['cyc']){ return e.reply('huasheng戳一戳未开启！！！')}
  return e.reply('========huasheng戳一戳帮助========\n①.戳一戳概率[数字],[数字],[数字]\n≯(3个数字请用逗号隔开)依次概率为:文字回复，图片回复，其他回复(其他回复包括有:禁言，戳回去，[爬]表情包等等)[注意3个概率数字之和必须为100]\n②.戳一戳总览\n≯查看戳一戳配置\n③.戳一戳图片回复列表\n④.戳一戳文字回复列表\n⑤.添加戳一戳文字+[内容]\n≯例如:添加戳一戳文字哈哈【添加成功后，你后续戳机器人，就会有概率回复哈哈】\n⑥.删除戳一戳文字+[序号]\n⑦.上传戳一戳图片\n≯请连同图片一起发送消息，或者引用图片回复【上传戳一戳图片】，(支持多张图片一起上传)\n⑧.删除戳一戳图片+[序号]\n⑨.戳一戳(开启|关闭)撤回\n⑩.戳一戳撤回时间[数字]\n≯单位为秒\n①①.戳一戳禁言时间[数字]\n≯单位为分钟\n')

}


}


    
